草庐IT

C++ 运算符 [] 魔法

全部标签

c++重载另一个类的赋值运算符

我有一个C++类来处理分数,我希望它允许转换为double,我有类似的东西:classfraction{doublen,d;public:fraction(double_n,double_d){n=_n;d=_d;}//somefunctionsdoubletodouble(){returnn/d;}};fractionfrac(1,2);doubledbl=frac.todouble();效果很好,但我想重载赋值运算符,这样我就可以直接使用:doubledbl=frac;我试着添加这个:doubledouble::operator=(double&dbl,fraction&frac)

c++ 删除 move 赋值运算符编译问题

以下代码在gcc4.8.0(mingw-w64)和-O2-std=c++11-frtti-fexceptions-mthreads中失败#includeclassParam{public:Param():data(newstd::string){}Param(conststd::string&other):data(newstd::string(other)){}Param(constParam&other):data(newstd::string(*other.data)){}Param&operator=(constParam&other){*data=*other.data;re

c++ - C++中的运算符重载

我最近发现了C++中的重载运算符。当你想在类中重载一个运算符,并且我们想用它创建新对象时,我们可以用我们定义的其他对象来创建新对象NameOfClassoperator+(constNameOfClass&b){{NameOfClasstmp;tmp.length=this->length+b.length;tmp.breadth=this->breadth+b.breadth;tmp.height=this->height+b.height;returntmp;}我不知道我是否在此之前定义了2个对象。例如NameOfClassone(length,breadth,height);Na

c++ - MSVS 2015 表达错误 C4146 - 应用于无符号类型的一元减号运算符

有没有办法在MicrosoftVisualStudio2015-ExpressEdition中禁用错误​​C4146?我尝试将“将警告视为错误”选项设置为否,但MSVC仍将C4146视为错误。有什么解决办法吗? 最佳答案 对于新的MicrosoftVisualStudioCommunityEdition项目,“SDL检查”默认设置为“是(/sdl)”。这会将某些“安全相关”警告变成错误。将参数设置为“No(/sdl-)”,将它们转回警告。请参阅有关“SDLCheck”的Microsoft文档,当前为here.编辑:这个问题已经在评论

c++ - STL 分配器和运算符 new[]

是否有使用operatornew[]的STL实现?作为分配器?在我的编译器上,生成Foo::operatornew[]private并没有阻止我创建vector...这种行为有任何保证吗? 最佳答案 C++标准,第20.4.1.1节。默认分配器allocate()函数使用全局运算符new:pointerallocate(size_typen,allocator::const_pointerhint=0);3Notes:Uses::operatornew(size_t)(18.4.1).

c++ - 将 setw 与用户定义的 ostream 运算符一起使用

如何让setw或类似的东西(boost格式?)与我的用户定义的ostream运算符一起工作?setw仅适用于推送到流的下一个元素。例如:cout其中myX是X类型,我有自己的ostream&operator 最佳答案 只需确保所有输出都作为对operator的同一调用的一部分发送到流中.实现此目的的一种直接方法是使用辅助ostringstream对象:#includeostream&operator 关于c++-将setw与用户定义的ostream运算符一起使用,我们在StackOver

c++ - 我什么时候应该定义自己的复制构造函数和赋值运算符

我正在阅读第5项中的effectiveC++,它提到了两种情况,我必须自己定义复制赋值运算符。case是一个包含const和reference成员的类。我写信是想问我必须定义自己的复制构造函数和赋值运算符的一般规则或情况是什么?我还想知道什么时候必须定义自己的构造函数和析构函数。非常感谢! 最佳答案 在以下情况下,您必须创建自己的复制构造函数和赋值运算符(通常还有默认构造函数):您希望您的对象被复制或分配,或放入标准容器中,例如vector默认的复制构造函数和赋值运算符不会做正确的事。考虑以下代码:classA;//definede

c++ - 如何为 boost::tuple 编写一个 `<<` 运算符?

在下面的示例代码中,它表明可以从第一个模板参数隐式创建boost::tuple。因此,我无法写运算符,因为它变得模棱两可。我也不明白为什么ostringstream&也是模棱两可的。这没有任何隐式构造。为什么这也会产生模棱两可的错误?#include#include#include#includeusingnamespacestd;classMyclass{};typedefboost::tupleMytuple;ostringstream&operator();//os_();//ErrorbecauseintisimplicitlyconvertedintoMytuple.WHYY

c++ - 使用 << 运算符将二进制文件写入 std::fstream

出于某种原因,这种排序代码没有像我预期的那样工作:std::fstreamtheFile;theFile.open(,std::ios::beg|std::ios::out|std::ios::binary|std::ios::trunc);theFile可能是什么问题?我正在使用VisualStudio2010附带的MicrosoftC++编译器。 最佳答案 运算符的全部目的是将格式化数据写入流。如果你想写二进制数据,你应该使用ostream::write()或ostream::put().

python - 比较运算符在 Python 与 C/C++ 中的优先级

在C/C++中,比较运算符,例如优先级高于==做。此代码的计算结果为true或1:if(3但在Python中,它似乎是错误的:3在Python中,每个比较运算符都具有相同的优先级吗? 最佳答案 在Python中,比较运算符不仅给予相同的优先级,而且还被特殊对待(它们链接而不是分组)。来自documentation:Formally,ifa,b,c,...,y,zareexpressionsandop1,op2,...,opNarecomparisonoperators,thenaop1bop2c...yopNzisequivalen